package Regex;

public class RegexDemo1 {
    //校验qq号
    public static void main(String[] args) {
        String qq="1816198";
        boolean flag=CheckQq(qq);
        System.out.println(flag);


        //正则
        System.out.println(qq.matches("[1-9]\\d{5,19}"));

        //字符类
        //[abc] 只能出现其中一个
        //[^abc] 除了abc 其余字符都可以
        //[a-zA-z]  包括az
        //[a-d[m-p]] 同上
        //[a-z&&[def]]   交集
        //[a-z&&[^bc]]  a-z与除了bc的交集 相当于ad-z
        //[a-z&&[^m-p]]  a-z与除了m-p的交集 相当于 a-lq-z
        System.out.println("ab".matches("[abc][abc]"));//true  因为从左到右一个一个匹配 a第一个 b第二个都满足
        //一个大括号只能和一个匹配

        //如果交集的时候写了一个& 表示是否在a-z 或者& 或者 def这三类里面 如果有那么返回true

        //  \    转义字符  写\d时前再加一个转义字符


        //预定义字符
        // . 任何字符
        // \d一个数字
        // \D 非数字
        // \s  一个空白字符 [\t \n \x0B \f \r ]
        // \S  非空白字符
        // \w 英文 下划线 数字[a-zA-z_0-9]
        // \W 非单词字符

        //一个. 表示一个


        //上述只能表示一个字符是否匹配
        //数量词
        //X?  一次或0次
        //X* 0次或多次
        //X+ 1次或多次
        //X{n}正好n次
        //X{n,} 至少n次
        //X{n,m} 至少n次 但不超过m次

        //忽略大小写的方式
        //"(?i)abc"
        //只忽略bc的大小写
        //"a(?i)bc"
        //只忽略b
        //"a((?i)b)c"

    }

    public static boolean CheckQq(String s){
        if(s.length()<6||s.length()>20){
            return false;
        }
        if(s.charAt(0)=='0'){
            return false;
        }
        for (int i = 0; i < s.length(); i++) {
            char c=s.charAt(i);
            if(c<'0'||c>'9'){
                return false;
            }
        }
        return true;

    }
}
